/**
 * 
 */
package kr.pe.johnkim.dayve.activity;

import java.io.IOException;
import java.util.List;

import org.json.JSONException;

import kr.pe.johnkim.dayve.provider.DayveLog;
import kr.pe.johnkim.dayve.rest.DayveCommonRest;
import kr.pe.johnkim.dayve.util.DayveCommon;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Dayve 안내 화면을 출력하는 클래스 이다.
 * 
 * @author johnkim
 *
 */
public class DayveIntroductionView extends Activity {

	public static String TAG = DayveIntroductionView.class.getSimpleName();
	
	// 현재 시간.
	private String currentDate;
	
	ImageView imgViewIntroductionBettersoft;
	TextView txtViewIntroductionVersionName;
	
	DayveCommonRest dayveCommonRest = new DayveCommonRest();
	DayveCommon dayveCommon = new DayveCommon();
	
	// 사용자 아이디.
	private String DAYVE_ID = "";
	
	// 이용 약관 출력 버튼.
	Button btnDayveTerms;
	
	public static Activity activity;

	/* (non-Javadoc)
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.dayve_introduction);
		
		activity = this;
		
		// SharedPreferences 정보를 확인 한다.
		confirmNotification();
		
		// 현재 시간을 가져 온다.
		currentDate = dayveCommon.getCurrentDate();
		
		// 안내문 그림을 세팅 한다.
		imgViewIntroductionBettersoft = (ImageView)findViewById(R.id.imgViewIntroductionBettersoft);
		imgViewIntroductionBettersoft.setImageResource(R.drawable.dayve_introduction_text2);
		
		// Version Name 을 세팅 한다.
		txtViewIntroductionVersionName = (TextView)findViewById(R.id.txtViewIntroductionVersionName);
		
		try {
			txtViewIntroductionVersionName.setText(getPackageManager().getPackageInfo(getPackageName(), 0).versionName);
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// 이용 약관 보기 버튼을 설정 한다.
		btnDayveTerms = (Button)findViewById(R.id.btnDayveTerms);
		btnDayveTerms.setText(R.string.introduction_button_terms);
		btnDayveTerms.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent i = new Intent(DayveIntroductionView.this, DayveTermsView.class);
				startActivity(i);
			}
			
		});
		
//		Log.e(TAG, "country          : " + getResources().getConfiguration().locale.getCountry());
//		Log.e(TAG, "display country  : " + getResources().getConfiguration().locale.getDisplayCountry());
//		Log.e(TAG, "language         : " + getResources().getConfiguration().locale.getLanguage());
//		Log.e(TAG, "display language : " + getResources().getConfiguration().locale.getDisplayLanguage());
		
	}
	
	/**
	 * SharedPreferences 정보를 확인 한다.
	 */
	public void confirmNotification() {
		String myPf = "kr.pe.johnkim.dayve.activity_preferences";
		SharedPreferences mSharedPreferences = getSharedPreferences(myPf, Activity.MODE_PRIVATE);
		
		// id 를 가져 온다.
		DAYVE_ID = mSharedPreferences.getString("dayve_id", "");

	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onResume()
	 */
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();

		// main thread 에서 child thread 를 호출 한다.
		Thread thread = new Thread(null, doBackgroundThreadProcessing, "Background_insertLog");
		thread.start();
	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onStop()
	 */
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();

		finish();
	}
	
	/* 최상위 프로세스가 아닐 경우 프로세스를 종료 한다.
	 * 
	 * => Home Key 를 눌렀을때 프로세스를 종료 한다.
	 * 
	 * @see android.app.Activity#onPause()
	 */
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		
		if(!isForegrdound()) {
			DayvePreferenceView.activity.finish();
			System.exit(0);
		}
	}
	
	/**
	 * 현재 프로세스가 최상위로 실행중인지 검사 한다.
	 * 
	 * true : 최상위
	 * 
	 * @return
	 */
	public boolean isForegrdound() {
	    ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
	    List<RunningTaskInfo> list = am.getRunningTasks(1);
	    ComponentName cn = list.get(0).topActivity;
	    String name = cn.getPackageName();
	     
	    return name.indexOf(getPackageName()) > -1;
	}

	/**
	 * 로그를 저장 한다.
	 */
	private void insertLog() {
		Log.i(TAG, "insertLog");
		
		DayveLog dayveLog = new DayveLog();
		
		dayveLog.setId(DAYVE_ID);
		dayveLog.setViewName(TAG);
		dayveLog.setAccessDate(currentDate);
		
		try {
			dayveCommonRest.registerLog(dayveLog);
			Log.i(TAG, "Success to insert log.");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.e(TAG, "Fail to insert log.");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.e(TAG, "Fail to insert log.");
		}
	}
	
	/**
	 * 로그 저장은 UI 와 관계 없기 때문에 background thread 로 구현 함 : child thread
	 */
	private Runnable doBackgroundThreadProcessing = new Runnable() {
		
		public void run() {
			// TODO Auto-generated method stub
			insertLog();
		}
	};
}
